package single_;

/**
 * 懒汉式单例模式
 */
public class SingleTon02 {
    public static void main(String[] args) {
        System.out.println(Cat.n1);
        Cat instance = Cat.getInstance();
        System.out.println(instance);

        //再次调用getInstance,不会创建新对象
        Cat instance2 = Cat.getInstance();
        System.out.println(instance2);
        System.out.println(instance == instance2);//true
    }
}

//希望在程序运行过程中，只能创建一个Cat对象
//使用单例模式
class Cat {
    private String name;
    private static Cat cat;
    public static int n1 = 100;
    //步骤
    //1.将构造器私有化，避免直接new
    //2.定义一个静态属性
    //3.提供一个public 的static方法，可以返回一个Cat对象
    //

    private Cat(String name) {
        System.out.println("构造器不会被调用，因为没有new对象...");
        this.name = name;
    }
    public static Cat getInstance() {
        if(cat == null) {//如果没有创建cat对象
            cat = new Cat("小可爱");
        }
        return cat;
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                '}';
    }
}
